{{tag>apt gestionnaire_de_paquets installation_logiciel}}

====== apt-get ======

**Apt-get** est un outil logiciel à utiliser en [[:commande_shell|ligne de commande]].\\
Il permet d'effectuer l'installation et la désinstallation de paquets en provenance d'un [[:depots|dépôt APT]].  

<note tip>''apt-get'' fournit un retour facilement analysable par un script et garantit une certaine rétro-compatibilité.

Cependant les fonctionnalités que proposent ''apt-get'' sont également disponibles via la commande [[:apt-cli|apt]], qui est plus conviviale pour l'utilisateur final. Préférez ''apt'' si vous comptez accéder directement à ces fonctionnalités via la ligne de commande.</note>

===== Pré-requis =====

Pour utiliser ''apt-get'', vous devez disposer des [[:sudo|droits d'administration]].\\ 
Si vous ne faites que télécharger les codes sources, vous pouvez vous passer des droits d'administration. Les paquets téléchargés sont placés dans votre dossier personnel.

===== Installation de paquets =====
<note tip>Vous pouvez également utiliser la commande suivante "sudo apt install <packet>", elle a 2 avantages par rapport à apt-get: la coloration du texte pour mieux se repérer et une barre d'avancement durant la décompression et la configuration des paquets.</note>
<code>sudo apt-get install <packet> <packet 2> etc ...</code>

==== Vérifier la version ====
Avant de lancer l'installation, il est parfois utile de vérifier la version qui sera installée, les dépendances, ...\\
<code>apt show <nom_du_paquet></code>
==== Installation d'une version présente dans les dépôts ====

  * <code>sudo apt-get install <paquet>=<version> -V</code> L'option **''=<version>''** passée à **''apt-get install''** permet d'**installer la version souhaitée du paquet indiqué**.
Très utile pour revenir à une version officielle d'un paquet (qui aurait été "upgradé à la main").

==== Installation avec réponse oui ====

  * <code>sudo apt-get install -y <paquet(s)></code> L'option -y permet de répondre oui par avance aux demandes de confirmations. Utile pour une utilisation dans un script, par exemple.

==== Réparer une installation ====
Bien que ce cas de figure soit un peu rare, il peut arriver qu'une dépendance vienne à manquer à un logiciel installé sur votre système.\\
La commande suivante permettra de résoudre le problème :
<code>sudo apt-get install -f</code>
Il faut cependant que la dépendance soit disponible dans les dépôts.
<note tip>Utilisée avec ''install'' ou ''remove'', cette commande exclura le paquet spécifié pour rechercher une solution viable pour le système.\\
Exemple :
<code>sudo apt-get -f install vlc</code>
recherchera une solution pour faire fonctionner [[vlc|VLC media player]] sans corrompre le système (FIXME).
</note>

==== Forcer une installation ====
Il n'existe pas de solution sur apt-get pour forcer une installation. [[dpkg|Dpkg]] a quelques options dans ce sens, mais qui ne résolvent pas toutes les situations pour autant.
<code>sudo dpkg -i --force-overwrite package.deb
sudo dpkg -i --force-all package.deb</code>

==== Trouver un paquet ====

Pour rechercher un paquet dans vos [[:dépôts]], tapez simplement la commande suivante :
<code>apt-cache search <word1 word2 ...></code>

L'option ''search'' passée à ''apt-cache'' permet de chercher les paquets contenant certains mots.

<note>Les réponses dépendent de vos dépôts et peuvent donc différer d'un système à l'autre.</note>

<note tip> Pour rechercher un paquet installé, il faut utiliser [[dpkg]], par exemple :
<code>dpkg -l NomDuPaquet</code></note>

==== Obtention des codes sources ====

  * <code>apt-get source <paquet(s)></code> L'option ''source'' passée à ''apt-get'' permet de **télécharger les paquets de codes sources indiqués**.

**''sudo''** n'est pas utilisé ici parce que ce n'est pas nécessaire. Le paquet sera enregistré dans votre //Dossier Personnel//.

Notez que "apt-get source" se sert des entrées "deb-src" dans le fichier **/etc/apt/sources.list** ou autres dans **/etc/apt/sources.list.d**.

L'instruction "apt-get source" va de pair avec "apt-get build-dep", qui installera les dépendances du paquet. Exemple complet:
<code>
apt-get install build-essential fakeroot
cd /tmp
apt-get source nano
apt-get build-dep nano
cd nano-2.2.6/
dpkg-buildpackage -rfakeroot -us -b
</code>

===== Suppression de paquets =====

==== Principe ====

  * <code>sudo apt-get remove <paquets(s)></code> L'option ''remove'' permet de **désinstaller les paquets indiqués**.  //Ceci laisse toutefois en place les fichiers de configuration de ces paquets.//
  * <code>sudo apt-get autoremove <paquets(s)></code> L'option ''autoremove'' permet de **désinstaller les paquets indiqués avec leurs dépendances logicielles**.  //Ceci laisse toutefois en place les fichiers de configuration de ces paquets.//

==== Suppression + purge ====

  * <code>sudo apt-get purge <paquets(s)></code> L'action ''purge'', passée à la commande ''apt-get'', **désinstalle les paquets indiqués **et** leurs fichiers de configuration** ((ceux marqués comme "conffile", souvent placés dans /etc.)). //Les fichiers de préférences((dans les dossiers personnels)), et les logs((dans le /var)) ne sont pas supprimés.//

  * <code>sudo apt-get autoremove --purge <paquets(s)></code> L'option ''%%--%%purge'', passée à la commande ''autoremove'', **désinstalle les paquets indiqués, les dépendances logicielles et leurs fichiers de configuration** ((ceux marqués comme "conffile", souvent placés dans /etc.)). //Les fichiers de préférences((dans les dossiers personnels)), et les journaux (logs) ((dans le /var)) ne sont pas supprimés.// 

  * <code>sudo apt-get autoremove --purge</code> L'option ''%%--%%purge'', passée à la commande ''autoremove'' **sans** nom de paquet, **désinstalle toutes les dépendances devenues inutiles et leurs fichiers de configuration** ((ceux marqués comme "conffile", souvent placés dans /etc.)). //Les fichiers de préférences((dans les dossiers personnels)), les journaux (logs) ((dans le /var)) et ceux, des anciens noyaux, marqués "d'installation manuelle" ne sont pas supprimés.//

==== Suppression de paquets d'installation ====

APT conserve une copie de chaque paquet installé et désinstallé sur votre disque dur (dans le dossier ///var/cache/apt/archives//). Utiliser les options ci-dessous permet de récupérer de l'espace disque par le nettoyage correspondant à l'option.

  * <code>sudo apt-get clean</code> L'option ''clean'', option radicale, **supprime la totalité des paquets** présents dans ///var/cache/apt/archives//. (//Notez que cela n'a aucun impact sur les paquets installés.//)
  * <code>sudo apt-get autoclean</code> L'option ''autoclean'' permet de **supprimer les paquets** présents dans ///var/cache/apt/archives// , mais **en conservant ceux qui ont un équivalent dans les dépôts**; par exemple, si  ///var/cache/apt/archives// contient plusieurs versions du même logiciel, les plus anciennes, plus présentes dans les dépôts, seront supprimées, mais la version à jour (ayant un équivalent dans le dépôt) sera conservée. //Ceci vous permet de récupérer beaucoup d'espace disque//, mais moins toutefois qu'avec "clean".   

===== Mises à jour =====
==== Mise à jour dépôts ====

  * <code>sudo apt-get update</code> L'option ''update'' **met à jour la liste des fichiers disponibles dans les dépôts APT présents dans le fichier de configuration ''/etc/apt/sources.list''**.  L'exécuter régulièrement est une bonne pratique, afin de maintenir à jour votre liste de paquets disponibles.

==== Mise à jour de paquets ====

  * <code>sudo apt-get install <paquet(s)> -V</code> L'option ''install'' met à jour les paquets **indiqués** déjà installés, vers leurs dernières versions  (rarement utilisé).

  *  <code>apt-get --simulate upgrade</code> L'option  ''simulate'' simule la mise à jour des paquets sans réellement les installer (rarement utilisé).

  * <code>sudo apt-get upgrade</code> L'option ''upgrade'' met à jour **tous les paquets installés sur le système** vers les dernières versions (couramment utilisé).

  * <code>sudo apt-get dist-upgrade</code> L'option ''dist-upgrade'' met à jour tous les paquets installés vers les dernières versions **en installant de nouveaux paquets si nécessaire**, par opposition à l'upgrade simple qui n'ajoute pas de nouveaux paquets.

Remarque : taper "man apt-get" dans un terminal donne une réponse en français et une explication plus complète et plus claire.

<note warning>L'option ''upgrade'' renvoie occasionnellement le message **Les paquets suivants ont été conservés**. Cela indique les paquets dont l'arbre des dépendances a changé et pour lesquels le programme n'a pas pris la libéralité de les installer de lui-même. Il suffit d'utiliser l'option ''install'' pour en forcer manuellement l'installation.</note>

==== Bloquer la mise à jour d'un paquet ====
[[:tutoriel:comment_modifier_un_fichier|Ouvrez avec les droits d'administration]] le fichier **/etc/apt/preferences** (si le fichier n'existe pas, le créer) pour y insérer les lignes suivantes:
<file>Package: nom_du_paquet
Pin: version du paquet à conserver
Pin-priority: 1001</file>
La Priorité du Pin à 1001 bloque les futures mises à jour :-)

== Exemple ==
Si par exemple vous souhaiter conserver la version 0.8.8 de kaffeine, vous indiquerez dans **/etc/apt/preferences**
<file>Package: kaffeine
Pin: version 0.8.8
Pin-priority: 1001</file>
Dans le doute, vérifier en tapant la commande **sudo apt-cache policy nom_du_paquet**, pour l'exemple du paquet kaffeine
<code>sudo apt-cache policy kaffeine</code>

<note tip>Une méthode plus simple (toujours avec le paquet kaffeine):

//__Pour les utilisateurs d'apt-get__ ://
<code bash>sudo apt-mark hold kaffeine</code>
Pour vérifier que le paquet n'a plus le statut install mais hold ((bloqué)) :
<code bash>apt-mark showhold</code> devrait afficher
<code>kaffeine</code> dans la liste des réponses

Pour le débloquer :
<code bash>sudo apt-mark unhold kaffeine</code>
[[https://manpages.debian.org/testing/apt/apt-mark.8.fr.html|Source]]

//__Pour les utilisateurs d'[[:aptitude]]__((merci à cthuluh #debian-fr))://

Pour geler un paquet
<code bash>sudo aptitude hold kaffeine</code>

Pour dégeler un paquet
<code bash>sudo aptitude unhold kaffeine</code>

Pour lister les paquets gelés :
<code bash>sudo dpkg --list | grep ^hi</code>
ou
<code bash>sudo aptitude search "~ahold"</code>

Remplacer kaffeine par le paquet que vous voulez bloquer ;)</note>

==== Sauvegarde de la liste ====
Voir [[:tutoriel:comment_sauver_et_restaurer_la_liste_des_paquets|cette page]] pour pouvoir facilement faire une sauvegarde de la liste des paquets installés.

==== Mises à jour automatisées ====

[[:tutoriel:comment_installer_un_paquet|Installer le paquet]] **[[apt>unattended-upgrades|unattended-upgrades]]** et lire ce  [[https://guide.ubuntu-fr.org/server/automatic-updates.html|guide du server Ubuntu sur les mises à jours automatiques]] //(en français)//.\\ 
Si vous le souhaitez, vous pouvez paramétrer uniquement les mises à jour de sécurité en automatique.

==== Mettre en cache pour un déploiement sur réseau local ====
Si vous disposez d'un réseau local, pour économiser de la bande passante externe lors des mises à jours vous pouvez mettre en cache sur une des machines les paquets téléchargés et les déployer ensuite sur les autres postes en faisant appel à [[:apt-cacher]].

===== Divers =====
==== Utiliser un proxy ====

Il suffit d'exporter les paramètres du [[:proxy]] à utiliser dans la [[:variables d'environnement|variable d'environnement]] **http_proxy**, sous la forme suivante :
<code>export http_proxy=http://utilisateur:motdepasse@exemple.com:port</code>
où :
  * //utilisateur// est le nom d'utilisateur pour se connecter au proxy si nécessaire,
  * //mot de passe// est le mot de passe éventuellement associé
  * //exemple.com// est l'adresse du proxy,
  * //port// est le port pour y accéder.

Pour rendre le changement permanent vous pouvez rajouter la ligne dans le fichier **.bashrc** ou créer un fichier **proxy** dans **/etc/apt/apt.conf.d/proxy** puis rajouter la ligne suivante :
<file>
Acquire::http::Proxy "http://utilisateur:motdepasse@exemple.com:port";
</file>

Pour un proxy FTP ajouter une partie comme suit :
<file>
Acquire::ftp
{
 Proxy "ftp://exemple.com:port/";
 ProxyLogin
 {
   "USER $(SITE_USER)@$(SITE)";
   "PASS $(SITE_PASS)";
 }
}
</file>

 où :
    * //exemple.com// est l'adresse du proxy,
    * //port// est le port pour y accéder.

N'oubliez pas, bien sûr, de changer le nom d'hôte //exemple.com// et le //port//.

==== Suppression d'un proxy ====

  - Allez dans //Système -> Préférences ->Serveur Mandataire//
  - Décochez "Configuration manuelle du  serveur mandataire"
  - Cochez "Connexion direct à internet" 
  - Cliquez sur "Appliquer à l'ensemble du système"
  - Fermez
  - [[:tutoriel:comment_modifier_un_fichier|Ouvrez avec les droits d'administration]] le fichier **/etc/apt/apt.conf.d/proxy**
  - Effacez la ou les ligne(s) en rapport avec le proxy
  - Après enregistrement, redémarrez votre PC

Et voilà il n'y a plus de proxy

==== Limiter la vitesse téléchargement  ====
[[:tutoriel:comment_modifier_un_fichier|Créer avec les droits d'administration]] le fichier **/etc/apt/apt.conf.d/76download** et copier les lignes suivantes pour limiter le téléchargement.\\
Par exemple ici à 25kB/s :
<file>
Acquire
{
Queue-mode "access";
http
{
Dl-Limit "25";
};
};
</file>

==== Historique  ====
   *  Le log (ou historique) des actions de apt-get se trouve dans **/var/log/apt/** 
<code> less /var/log/apt/history.log</code>

**history.log** correspond à l'historique du mois en cours.

  * À la fin de chaque mois, ce fichier est archivé sous la forme history.log.1.gz
On affiche un tel fichier archivé avec zless
<code>zless /var/log/apt/history.log.1.gz </code>

===== Voir aussi =====

  * [[:apt-cli|apt]]
  * [[:APT]]
  * [[:apt-cache]]
  * [[:apt-fast|apt-fast]]
  * [[https://www.debian.org/doc/manuals/apt-howto/ch-apt-get.fr.html|Manuel Debian sur APT : Gestion des paquets]]
  * [[:probleme_apt|Problèmes avec les gestionnaires de paquets]]
----
//Contributeurs : [[:utilisateurs:trhilkil|TrHiLKiL]], [[:utilisateurs:ste]], Emmanuel Gontcho, [[:utilisateurs:david96|david96]], [[:utilisateurs:boogy]], [[:utilisateurs:crustyourmind|Crustyourmind]] .//